package model

import "time"

// TaskRequest 任务申请请求
type TaskRequest struct {
	Originator string `json:"originator"` // 系统标识，信源标识
	Recipient  string `json:"recipient"`  // 系统标识，信宿标识
	PlanList   []Plan `json:"planList"`   // 计划列表
}

// Plan 计划信息
type Plan struct {
	PlanID    string `json:"planID"`    // 计划编号
	Satellite string `json:"satellite"` // 天链航天中心的卫星名称
	TaskList  []Task `json:"taskList"`  // 任务列表
}

// Task 任务信息
type Task struct {
	TaskID        string    `json:"taskID"`        // 任务序号
	Antenna       string    `json:"antenna"`       // 天链航天中心的设备代号
	SatArriveTime time.Time `json:"satArriveTime"` // 卫星进站时间
	SatLeaveTime  time.Time `json:"satLeaveTime"`  // 卫星出站时间
	OrbitID       string    `json:"orbitID"`       // 轨道圈号
	TaskMode      string    `json:"taskMode"`      // 作业方式组合
	TMInfo        *TMInfo   `json:"tmInfo"`        // 遥测接收信息
	TCInfo        *TCInfo   `json:"tcInfo"`        // 卫星遥控信息
	RecvInfo      *RecvInfo `json:"recvInfo"`      // 数传任务信息
}

// TMInfo 遥测接收信息
type TMInfo struct {
	TMFrequency string `json:"tmFrequency"` // 遥测数据接收频段
}

// TCInfo 卫星遥控信息
type TCInfo struct {
	TCFrequency string    `json:"tcFrequency"` // 测控指令上行频段
	TCStartTime time.Time `json:"tcStartTime"` // 遥控起始时间
	TCEndTime   time.Time `json:"tcEndTime"`   // 遥控结束时间
}

// RecvInfo 数传任务信息
type RecvInfo struct {
	ImagingMode          string        `json:"imagingMode"`          // 卫星工作方式
	RecvStartTime        time.Time     `json:"recvStartTime"`        // 接收起始时间
	RecvEndTime          time.Time     `json:"recvEndTime"`          // 接收结束时间
	ReceiveChannelAmount string        `json:"receiveChannelAmount"` // 接收通道数
	ChannelList          []ChannelInfo `json:"channelList"`          // 通道信息列表
}

// ChannelInfo 通道信息
type ChannelInfo struct {
	ChannelID       string `json:"channelID"`       // 通道标识
	SensorName      string `json:"sensorName"`      // 传感器名称
	UplinkBitRate   string `json:"uplinkBitRate"`   // 上行码速率
	DownlinkBitRate string `json:"downlinkBitRate"` // 下行码速率
}

// TaskCancelRequest represents a request to cancel tasks
type TaskCancelRequest struct {
	Originator string           `json:"originator"`
	Recipient  string           `json:"recipient"`
	PlanList   []TaskCancelPlan `json:"planList"`
}

// TaskCancelPlan represents a plan in the task cancellation request
type TaskCancelPlan struct {
	PlanID         string   `json:"planID"`
	Satellite      string   `json:"satellite"`
	TaskCancelList []string `json:"taskCancelList"`
}

// Response 通用响应结构
type Response struct {
	Code int         `json:"code"` // 状态码
	Msg  string      `json:"msg"`  // 备注
	Data interface{} `json:"data"` // 响应内容
}

// IdleArcQueryRequest represents a request to query idle arcs
type IdleArcQueryRequest struct {
	Originator string `json:"originator"`
	Recipient  string `json:"recipient"`
	Satellite  string `json:"satellite"`
	StartTime  string `json:"startTime"` // Format: 2020-12-08T00:01:04.000Z
	EndTime    string `json:"endTime"`   // Format: 2020-12-08T00:01:04.000Z
}

// IdleArcQueryResponse represents the response for idle arc query
type IdleArcQueryResponse struct {
	Code int              `json:"code"`
	Msg  string           `json:"msg"`
	Data []IdleArcStation `json:"data"`
}

// IdleArcStation represents available arcs for a station
type IdleArcStation struct {
	Antenna   string    `json:"antenna"`
	Available []IdleArc `json:"avaliable"` // Note: API uses "avaliable" instead of "available"
}

// IdleArc represents a single idle arc period
type IdleArc struct {
	From      string `json:"from"`      // Format: 2020-12-08T00:01:04.000Z
	To        string `json:"to"`        // Format: 2020-12-08T00:01:04.000Z
	Elevation string `json:"elevation"` // Elevation angle
	Circle    string `json:"circle"`    // Orbit circle number
}
